#include <CValue.h>

CValue::CValue()
{
	this->m_numValue = 0;
	this->m_strValue = "";
}

CValue::~CValue()
{
	this->m_numValue = 0;
	this->m_strValue = "";
}

bool CValue::isNumber(STRING _strValue)
{
	bool tmp_stat = false;
	for (int i = 0; i < _strValue.length(); i++)
	{
		if (_strValue[i] < '0' || _strValue[i] > '9')
		{
			if (!tmp_stat)
			{
				if (_strValue[i] == '.')
				{
					tmp_stat = true;
				}
				else
				{
					return false;
				}
			}
			else
			{
				return false;
			}
		}
	}
	return true;
}


CValue& CValue::operator = (const INT& _intValue)
{
	this ->m_numValue = (DOUBLE)_intValue;
	stringstream tmp_ss;
	tmp_ss.precision(30);
	tmp_ss<<this ->m_numValue;
	this->m_strValue = tmp_ss.str();
	return *this;
}

CValue& CValue::operator = (const DOUBLE& _numberValue)
{
	this ->m_numValue = _numberValue;
	stringstream tmp_ss;
	tmp_ss.precision(30);
	tmp_ss<<this ->m_numValue;
	this->m_strValue = tmp_ss.str();
	return *this;
}


CValue& CValue::operator = (const STRING& _strValue)
{
	this ->m_strValue = _strValue;
	if (this->isNumber(this ->m_strValue))
	{
		stringstream tmp_ss(this ->m_strValue);
		tmp_ss.precision(30);
		tmp_ss>>this->m_numValue;
	}
	else
	{
		this->m_numValue = 0;
	}
	return *this;
}


void CValue::setString (const STRING& _strValue)
{
	this->m_strValue = _strValue;
}

void CValue::setNumber (const DOUBLE& _numberValue)
{
	this->m_numValue = _numberValue;
}

STRING CValue::getString()
{
	return this->m_strValue;
}


DOUBLE CValue::getNumber()
{
	return this->m_numValue;
}


INT CValue::getInt()
{
	return (INT)this->m_numValue;
}

extern "C" _DLLFUNC PCValue CreateNewCValueNULL()
{
	return new CValue();
}
